
package appvideo.persistencia;

import appvideo.logica.Caja;
import java.sql.Connection;
import java.sql.ResultSet;


import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


public class Persistencia_Caja {   
    
    public static void registraNuevoUso(Caja caja){
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        try {
            st = con.createStatement();           
            Date fecha = new Date();
            //inserta el registro correspondiente con su fecha y hora
            SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat dtt = new SimpleDateFormat("hh:mm:ss");
            st.executeUpdate("INSERT INTO caja (idSocio,cantidad,concepto,fecha,hora) "
            + "VALUES ("+caja.getIdSocio()+","+caja.getCantidad()+",'"+caja.getConcepto()+"','"+dt.format(fecha)+"','"+dtt.format(fecha) +"')");
           
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {                
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }           
    }
    
    public static List<Caja> visualizarRegistrosCaja(){
        
        List<Caja> cajas=new ArrayList();
        java.util.Date fechacompara;
        Date fechaactual;
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();            
            rs = st.executeQuery("SELECT id,idSocio,cantidad,concepto,fecha,hora FROM caja");

           while(rs.next()){

                SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
                fechacompara = rs.getDate("fecha");
                Date fechahoy = new Date();                 //todo esto para meterlo en String y compararla con la fecha actual
                String fechahoy2=dt.format(fechahoy);       // solo yyyy/mm/dd si la hora porque si no nunca es la misma
                String fechacompara2=dt.format(fechacompara);

                if(fechahoy2.equals(fechacompara2)){
                    Caja c = new Caja(rs.getInt("id"),rs.getInt("idSocio"),rs.getDouble("cantidad"),rs.getString("concepto"),rs.getDate("fecha"),rs.getTime("hora"));
                    cajas.add(c);
                    }
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }        
        return cajas;    
    }
    
     public static List<Caja> visualizarRegistrosCajaEntera(){
        
        List<Caja> cajas=new ArrayList();
        java.util.Date fechacompara;
        Date fechaactual;
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();
            
            rs = st.executeQuery("SELECT id,idSocio,cantidad,concepto,fecha,hora FROM caja");

            while(rs.next()){           
                Caja c = new Caja(rs.getInt("id"),rs.getInt("idSocio"),rs.getDouble("cantidad"),rs.getString("concepto"),rs.getDate("fecha"),rs.getTime("hora"));
                cajas.add(c);         
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }        
        return cajas;    
    }

     public static List<Caja> visualizarRegistrosSocio(int indice){
        
        List<Caja> cajas=new ArrayList();
        java.util.Date fechacompara;
        Date fechaactual;
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();            
            rs = st.executeQuery("SELECT id,idSocio,cantidad,concepto,fecha,hora FROM caja");

            while(rs.next()){
           
                SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
                fechacompara = rs.getDate("fecha");
                Date fechahoy = new Date();                 //todo esto para meterlo en String y compararla con la fecha actual
                String fechahoy2=dt.format(fechahoy);       // solo yyyy/mm/dd si la hora porque si no nunca es la misma
                String fechacompara2=dt.format(fechacompara);
                int indice2=rs.getInt("idSocio");
                if(fechahoy2.equals(fechacompara2)&&indice==indice2){
                    Caja c = new Caja(rs.getInt("id"),rs.getInt("idSocio"),rs.getDouble("cantidad"),rs.getString("concepto"),rs.getDate("fecha"),rs.getTime("hora"));
                    cajas.add(c);
                }
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }        
        return cajas;    
    }

    public static void bajaRegistroCaja(int registro){
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        try {
            st = con.createStatement();               
            st.executeUpdate("DELETE FROM caja WHERE caja.id="+registro+"");                                          
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {                
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }             
        
    }
    
    public static void anulaRegistroCaja(Caja caja){
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();
            SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
            //Selecciona id del ultimo alquiler que un socio registró
            rs = st.executeQuery("SELECT MAX(id) FROM caja WHERE idSocio="+caja.getIdSocio()+" AND caja.fecha='"+dt.format(caja.getFecha())+"'");
            if(rs.next()){
                int id_caja = rs.getInt("MAX(id)");
                st.executeUpdate("DELETE FROM caja WHERE id="+id_caja+"");   
            }          
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }                   
    }
    
    public static double calculaTotal(){
        
        double total=0;
        java.util.Date fechacompara;
        Date fechaactual;
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();            
            rs = st.executeQuery("SELECT id,idSocio,cantidad,concepto,fecha,hora FROM caja");
            while(rs.next()){

                SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
                fechacompara = rs.getDate("fecha");
                Date fechahoy = new Date();                 //todo esto para meterlo en String y compararla con la fecha actual
                String fechahoy2=dt.format(fechahoy);       // solo yyyy/mm/dd si la hora porque si no nunca es la misma
                String fechacompara2=dt.format(fechacompara);

                if(fechahoy2.equals(fechacompara2)){
                    total=total+rs.getDouble("cantidad");
                    }
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }        
        return total;    
    }               
           
}
